Conventional systems normally maintain a checksum per block of data and store the checksum with the block. This allows the conventional systems to perform integrity checks that can show that data is corrupted but not catch errors like reordering, lost writes, or corruptions before it was added to the metadata. These conventional systems also cannot pinpoint the corruption location in a piece of data.
Some other conventional systems maintain hierarchical checksums to pinpoint the corrupted regions. Hierarchical checksums involve generating checksums based on portions of an object and then generating an overall checksum for the object based on the checksums corresponding to the portions of the object. However, hierarchical checksums come at a cost of a larger amount of metadata that scales with the size of the object.